/**
 * 认证相关的功能模块
 */
const AuthService = {
    // API基础URL
    API_URL: '/api/auth/',
    
    // 用户注册
    register: function(username, password, email) {
        return axios.post(this.API_URL + 'register', {
            username: username,
            password: password,
            email: email
        });
    },
    
    // 用户登录
    login: function(username, password) {
        return axios.post(this.API_URL + 'login', {
            username: username,
            password: password
        }).then(response => {
            if (response.data.token) {
                // 保存用户信息和JWT令牌到本地存储
                localStorage.setItem('user', JSON.stringify(response.data));
            }
            return response.data;
        });
    },
    
    // 用户登出
    logout: function() {
        localStorage.removeItem('user');
    },
    
    // 获取当前登录用户信息
    getCurrentUser: function() {
        return JSON.parse(localStorage.getItem('user'));
    },
    
    // 检查用户是否已登录
    isLoggedIn: function() {
        const user = this.getCurrentUser();
        return !!user && !!user.token;
    },
    
    // 获取用户授权头信息（用于API请求）
    getAuthHeader: function() {
        const user = this.getCurrentUser();
        if (user && user.token) {
            return { 'Authorization': 'Bearer ' + user.token };
        } else {
            return {};
        }
    }
};

/**
 * 设置axios拦截器，自动添加授权头
 */
axios.interceptors.request.use(
    config => {
        const user = AuthService.getCurrentUser();
        if (user && user.token) {
            config.headers['Authorization'] = 'Bearer ' + user.token;
        }
        return config;
    },
    error => {
        return Promise.reject(error);
    }
);

/**
 * 响应拦截器，处理401未授权错误
 */
axios.interceptors.response.use(
    response => {
        return response;
    },
    error => {
        if (error.response && error.response.status === 401) {
            // 如果收到401响应，清除用户信息并重定向到登录页面
            AuthService.logout();
            window.location.href = '/';
        }
        return Promise.reject(error);
    }
); 